﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

using MakeIT.SGI.ERP.Negocios;
using MakeIT.SGI.ERP.Entidades;
using System.Web.UI.WebControls;
using MakeIT.Framework.Util;

namespace MakeIT.SGI.ERP.Apresentacao
{
    public class CarregaDDL
    {
        #region NULL

        /// <summary>
        /// Carrega um DropDownList com um único registro, que repesenta vazio
        /// </summary>
        /// <param name="ddl">ddl = DropDownList que será carregado</param>
        public static void carregaNULL(DropDownList ddl)
        {
            Dictionary<int, string> d = new Dictionary<int, string>();
            d.Add(-1, "");

            ddl.Items.Clear();
            ddl.DataTextField = "value";
            ddl.DataValueField = "key";
            ddl.DataSource = d;
            ddl.DataBind();

        }

        #endregion

        #region SITUAÇÃO (Caixa, Título a Pagar, Título a Receber)

        /// <summary>
        /// Carrega uma lista de situação contendo na lista (key = value)  "A = Aberto, F = Fechado"
        /// </summary>
        /// <param name="ddl">ddl = DropDownList que será carregado a lista</param>
        public static void carregaCaixaSituacao(DropDownList ddl, string tabela, bool pesquisa)
        {
            Dictionary<char, string> d = new Dictionary<char, string>();

            if (pesquisa)
                d.Add('0', "");

            if (tabela.Equals("CAIXA"))
            {
                d.Add('A', "Aberto");
                d.Add('F', "Fechado");
            }

            ddl.Items.Clear();
            ddl.DataTextField = "value";
            ddl.DataValueField = "key";
            ddl.DataSource = d;
            ddl.DataBind();

        }

        /// <summary>
        /// Carrega uma lista de situação contendo na lista (key = value)  "A = Aberto, F = Fechado, C = Cancelado"
        /// </summary>
        /// <param name="ddl">ddl = DropDownList que será carregado a lista</param>
        public static void carregaTituloPagarSituacao(DropDownList ddl, string tabela, bool pesquisa)
        {
            Dictionary<char, string> d = new Dictionary<char, string>();

            if (pesquisa)
                d.Add('0', "");

            if (tabela.Equals("TITULOPAGAR"))
            {
                d.Add('A', "Aberto");
                d.Add('C', "Cancelado");
                d.Add('F', "Fechado");
            }

            ddl.Items.Clear();
            ddl.DataTextField = "value";
            ddl.DataValueField = "key";
            ddl.DataSource = d;
            ddl.DataBind();

        }

        #endregion

        #region Natureza (D = Débito, C = Crédito)

        /// <summary>
        /// Carrega uma lista de natureza contendo na lista (key = value)  "A = Aberto, F = Fechado"
        /// </summary>
        /// <param name="ddl">ddl = DropDownList que será carregado a lista</param>
        public static void carregaNatureza(DropDownList ddl, bool pesquisa)
        {
            Dictionary<char, string> d = new Dictionary<char, string>();

            if (pesquisa)
                d.Add('0', "");

            d.Add('C', "Crédito");
            d.Add('D', "Débito");

            ddl.Items.Clear();
            ddl.DataTextField = "value";
            ddl.DataValueField = "key";
            ddl.DataSource = d;
            ddl.DataBind();

        }

        #endregion

        #region Origem e Destino Ticket (C = Caixa, F = Financeiro)

        /// <summary>
        /// Carrega uma lista de origem ou destino de um ticket contendo na lista (key = value)  "C = Caixa, F = Financeiro"
        /// </summary>
        /// <param name="ddl">ddl = DropDownList que será carregado a lista</param>
        public static void carregaOrigemDestinoTicket(DropDownList ddl, bool pesquisa)
        {
            Dictionary<char, string> d = new Dictionary<char, string>();

            if (pesquisa)
                d.Add('0', "");

            d.Add('C', "CAIXA");
            d.Add('F', "FINANCEIRO");

            ddl.Items.Clear();
            ddl.DataTextField = "value";
            ddl.DataValueField = "key";
            ddl.DataSource = d;
            ddl.DataBind();
        }

        #endregion

        //==================================================================================================================================//

        #region Filial

        /// <summary>
        /// Carrega a Filial de acorodo com a filial do login. Se for Admin carreta todas filiais
        /// </summary>
        /// <param name="ddl">ddl = DropDownList que será carregado</param>
        public static void carregaFilial(SgiDAOT daoT, DropDownList ddl)
        {
            UsuarioVO usuarioVO = (UsuarioVO)HttpContext.Current.Session["userActive"];

            if (usuarioVO == null)
                HttpContext.Current.Response.Redirect("~/Gestor.aspx");

            ddl.DataValueField = "PKString";
            ddl.DataTextField = "filial";

            if (usuarioVO.idPessoaVO == null || usuarioVO.idPessoaVO.idFilial == 0)
            {
                List<FilialVO> filialVOLista = new List<FilialVO>();
                FilialVO fVO = FilialVO.CreateVO();
                fVO.idFilial = -1;
                fVO.filial = " ";
                filialVOLista.Add(fVO);
                filialVOLista.AddRange(daoT.getFilials());
                ddl.DataSource = filialVOLista;
            }
            else
            {
                ddl.DataSource = daoT.getFilials(usuarioVO.idPessoaVO.idFilial);
            }

            ddl.DataBind();
        }

        #endregion

        //==================================================================================================================================//

        #region Pessoa

        /// <summary>
        /// Carrega todas as pessoas para um DropDownList filtrando pela filial e pelas iniciais da pessoa
        /// </summary>
        /// <param name="ddl">ddl = DropDownList que será carregado</param>
        /// <param name="filtro">filtro = iniciais da pessoa</param>
        /// <param name="idFilial">idFilial = id da filial a ser pesquisada</param>
        public static void carregaPessoa(SgiDAOT daoT, DropDownList ddl, int? idFilial)
        {
            PessoaVO idPessoaVO = PessoaVO.CreateVO();
            idPessoaVO.idPessoa = -1;
            idPessoaVO.pessoa = "";
            List<PessoaVO> idPessoaVOs = new List<PessoaVO>();

            idPessoaVOs.Clear();
            idPessoaVOs.Add(idPessoaVO);

            idPessoaVOs.AddRange(daoT.getPessoas(null, null, idFilial, null, null));

            ddl.DataTextField = "pessoa";
            ddl.DataValueField = "PKString";
            ddl.DataSource = idPessoaVOs;
            ddl.DataBind();
        }

        public static void carregaPessoa(SgiDAOT daoT, DropDownList ddl, string filtro, int? idFilial)
        {
            PessoaVO idPessoaVO = PessoaVO.CreateVO();
            idPessoaVO.idPessoa = -1;
            idPessoaVO.pessoa = "";
            List<PessoaVO> idPessoaVOs = new List<PessoaVO>();

            idPessoaVOs.Clear();
            idPessoaVOs.Add(idPessoaVO);

            if (!String.IsNullOrEmpty(filtro) && !idFilial.Equals("-1"))
                idPessoaVOs.AddRange(daoT.getPessoas(null, filtro, idFilial, null, null));

            ddl.DataTextField = "pessoa";
            ddl.DataValueField = "PKString";
            ddl.DataSource = idPessoaVOs;
            ddl.DataBind();
        }

        #endregion

        #region Fornecedor

        public static void carregaFornecedor(SgiDAOT daoT, DropDownList ddl, int? idFilial)
        {
            FornecedorVO idFornecedorVO = FornecedorVO.CreateVO();
            idFornecedorVO.idPessoa = -1;
            idFornecedorVO.idFornecedor = -1;
            idFornecedorVO.pessoa = "";
            List<FornecedorVO> idFornecedorVOs = new List<FornecedorVO>();

            idFornecedorVOs.Clear();
            idFornecedorVOs.Add(idFornecedorVO);

            idFornecedorVOs.AddRange(daoT.getFornecedors(null, null, idFilial));

            ddl.DataTextField = "pessoa";
            ddl.DataValueField = "PKString";
            Util.CarregarCombo(ddl, idFornecedorVOs);
        }

        public static void carregaFornecedor(SgiDAOT daoT, DropDownList ddl, string filtro, int? idFilial)
        {
            FornecedorVO idFornecedorVO = FornecedorVO.CreateVO();
            idFornecedorVO.idPessoa = -1;
            idFornecedorVO.idFornecedor = -1;
            idFornecedorVO.pessoa = "";
            List<FornecedorVO> idFornecedorVOs = new List<FornecedorVO>();

            idFornecedorVOs.Clear();
            idFornecedorVOs.Add(idFornecedorVO);

            if (!String.IsNullOrEmpty(filtro) && !idFilial.Equals("-1"))
                idFornecedorVOs.AddRange(daoT.getFornecedors(null, null, idFilial, filtro));
                
            ddl.DataTextField = "pessoa";
            ddl.DataValueField = "PKString";
            Util.CarregarCombo(ddl, idFornecedorVOs);
        }


        #endregion

        #region Fornecedor

        public static void carregaCliente(SgiDAOT daoT, DropDownList ddl, int? idFilial)
        {
            ClienteVO idClienteVO = ClienteVO.CreateVO();
            idClienteVO.idPessoa = -1;
            idClienteVO.idCliente = -1;
            idClienteVO.pessoa = "";
            List<ClienteVO> idClienteVOs = new List<ClienteVO>();

            idClienteVOs.Clear();
            idClienteVOs.Add(idClienteVO);

            idClienteVOs.AddRange(daoT.getClientes(null, null, idFilial));

            ddl.DataTextField = "pessoa";
            ddl.DataValueField = "PKString";
            Util.CarregarCombo(ddl, idClienteVOs);
        }

        public static void carregaCliente(SgiDAOT daoT, DropDownList ddl, string filtro, int? idFilial)
        {
            ClienteVO idClienteVO = ClienteVO.CreateVO();
            idClienteVO.idPessoa = -1;
            idClienteVO.idCliente = -1;
            idClienteVO.pessoa = "";
            List<ClienteVO> idClienteVOs = new List<ClienteVO>();

            idClienteVOs.Clear();
            idClienteVOs.Add(idClienteVO);

            if (!String.IsNullOrEmpty(filtro) && !idFilial.Equals("-1"))
                idClienteVOs.AddRange(daoT.getClientes(null, null, idFilial, filtro));

            ddl.DataTextField = "pessoa";
            ddl.DataValueField = "PKString";
            Util.CarregarCombo(ddl, idClienteVOs);
        }


        #endregion

        //==================================================================================================================================//

        #region Endereço

        public static void carregaEstado(SgiDAOT daoT, DropDownList ddl)
        {
            List<UfVO> idEstadoCadVOs = new List<UfVO>();
            UfVO idEstadoCadVO = UfVO.CreateVO();
            idEstadoCadVO.idUf = -1;
            idEstadoCadVO.sigla = "";
            idEstadoCadVOs.Add(idEstadoCadVO);
            idEstadoCadVOs.AddRange(daoT.getUfs());

            ddl.DataTextField = "sigla";
            ddl.DataValueField = "PKString";
            Util.CarregarCombo(ddl, idEstadoCadVOs);
        }

        public static void carregaCidade(SgiDAOT daoT, DropDownList ddl, int? filtro)
        {
            List<CidadeVO> idCidadeCadVOs = new List<CidadeVO>();
            CidadeVO idCidadeCadVO = CidadeVO.CreateVO();
            idCidadeCadVO.idCidade = -1;
            idCidadeCadVO.cidade = "";

            idCidadeCadVOs.Clear();
            idCidadeCadVOs.Add(idCidadeCadVO);
            idCidadeCadVOs.AddRange(daoT.getCidades(null, null, filtro));

            ddl.DataTextField = "cidade";
            ddl.DataValueField = "PKString";
            Util.CarregarCombo(ddl, idCidadeCadVOs);
        }

        public static void carregaBairro(SgiDAOT daoT, DropDownList ddl, int? filtro)
        {
            BairroVO idBairroVO = BairroVO.CreateVO();
            idBairroVO.idBairro = -1;
            idBairroVO.bairro = "";
            List<BairroVO> idBairroVOs = new List<BairroVO>();

            idBairroVOs.Clear();
            idBairroVOs.Add(idBairroVO);
            idBairroVOs.AddRange(daoT.getBairros(null, filtro, null));

            ddl.DataTextField = "bairro";
            ddl.DataValueField = "PKString";
            Util.CarregarCombo(ddl, idBairroVOs);
        }

        public static void carregaTipoLogradouro(SgiDAOT daoT, DropDownList ddl, int? filtro)
        {
            LogradourotipoVO idLogradouroTipoVO = LogradourotipoVO.CreateVO();
            idLogradouroTipoVO.idlogradouroTipo = -1;
            idLogradouroTipoVO.logradouroSigla = "";
            List<LogradourotipoVO> idLogradouroTipoVOs = new List<LogradourotipoVO>();
            idLogradouroTipoVOs.Add(idLogradouroTipoVO);
            idLogradouroTipoVOs.AddRange(daoT.getLogradourotipos(filtro));

            ddl.DataValueField = "PKString";
            ddl.DataTextField = "logradouroSigla";
            Util.CarregarCombo(ddl, idLogradouroTipoVOs);
        }

        public static void carregaLogradouro(SgiDAOT daoT, DropDownList ddl, int? idBairro, string CEP)
        {
            LogradouroVO idLogradouroVO = LogradouroVO.CreateVO();
            idLogradouroVO.idLogradouro = -1;
            idLogradouroVO.logradouro = "";
            List<LogradouroVO> idLogradouroVOs = new List<LogradouroVO>();
            idLogradouroVOs.Add(idLogradouroVO);

            if (!idBairro.Equals("-1") || !String.IsNullOrEmpty(CEP))
                idLogradouroVOs.AddRange(daoT.getLogradouros(null, null, idBairro, null, CEP));

            ddl.DataValueField = "PKString";
            ddl.DataTextField = "logradouro";
            Util.CarregarCombo(ddl, idLogradouroVOs);
        }

        public static void carregaTipoEndereco(SgiDAOT daoT, DropDownList ddl, int? idFilial)
        {
            EnderecotipoVO idEnderecotipoVO = EnderecotipoVO.CreateVO();
            idEnderecotipoVO.idEnderecoTipo = -1;
            idEnderecotipoVO.enderecoTipo = "";
            List<EnderecotipoVO> idEnderecotipoVOs = new List<EnderecotipoVO>();

            idEnderecotipoVOs.Clear();
            idEnderecotipoVOs.Add(idEnderecotipoVO);

            if (!idFilial.Equals("-1"))
                idEnderecotipoVOs.AddRange(daoT.getEnderecotipos(null, null, idFilial, null, null, null, null));

            ddl.DataTextField = "enderecoTipo";
            ddl.DataValueField = "idEnderecoTipo";
            Util.CarregarCombo(ddl, idEnderecotipoVOs);
        }

        #endregion

        //==================================================================================================================================//

        #region Caixa

        //--------------------- Caixa ------------------------
        public static void carregaCaixa(SgiDAOT daoT, DropDownList ddl, int? idFilial)
        {
            CaixaVO idCaixaVO = CaixaVO.CreateVO();
            idCaixaVO.idCaixa = -1;
            idCaixaVO.caixa = "";
            List<CaixaVO> idCaixaVOs = new List<CaixaVO>();

            idCaixaVOs.Clear();
            idCaixaVOs.Add(idCaixaVO);

            if (!idFilial.Equals("-1"))
                idCaixaVOs.AddRange(daoT.getCaixas(null, null, idFilial, null, null));

            ddl.DataTextField = "caixa";
            ddl.DataValueField = "idCaixa";
            Util.CarregarCombo(ddl, idCaixaVOs);
        }

        //------------------- Caixa Tipo ----------------------
        public static void carregaCaixaTipo(SgiDAOT daoT, DropDownList ddl, int? idFilial)
        {
            CaixatipoVO idCaixaTipoVO = CaixatipoVO.CreateVO();
            idCaixaTipoVO.idCaixaTipo = -1;
            idCaixaTipoVO.caixaTipo = "";
            List<CaixatipoVO> idCaixaTipoVOs = new List<CaixatipoVO>();

            idCaixaTipoVOs.Clear();
            idCaixaTipoVOs.Add(idCaixaTipoVO);

            if (!idFilial.Equals("-1"))
                idCaixaTipoVOs.AddRange(daoT.getCaixatipos(null, null, idFilial, null));

            ddl.DataTextField = "caixaTipo";
            ddl.DataValueField = "idCaixaTipo";
            Util.CarregarCombo(ddl, idCaixaTipoVOs);
        }
        
        #endregion
        //==================================================================================================================================//

        #region Banco

        //--------------------- Banco ------------------------
        public static void carregaBanco(SgiDAOT daoT, DropDownList ddl, int? idFilial)
        {
            BancoVO idBancoVO = BancoVO.CreateVO();
            idBancoVO.idBanco = -1;
            idBancoVO.banco = "";
            List<BancoVO> idBancoVOs = new List<BancoVO>();

            idBancoVOs.Clear();
            idBancoVOs.Add(idBancoVO);

            if (!idFilial.Equals("-1"))
                idBancoVOs.AddRange(daoT.getBancos(null, null, idFilial, null));

            ddl.DataTextField = "tostring";
            ddl.DataValueField = "PKString";
            Util.CarregarCombo(ddl, idBancoVOs);
        }

        #endregion

        //==================================================================================================================================//

        #region Conta Corrente

        //--------------------- Conta Corrente ------------------------
        public static void carregaContaCorrente(SgiDAOT daoT, DropDownList ddl, int? idFilial, int? idBanco)
        {
            CtacorVO idContaCorrenteVO = CtacorVO.CreateVO();
            idContaCorrenteVO.idCtaCor = -1;
            idContaCorrenteVO.ctaCor = "";
            List<CtacorVO> idContaCorrenteVOs = new List<CtacorVO>();

            idContaCorrenteVOs.Clear();
            idContaCorrenteVOs.Add(idContaCorrenteVO);

            if (!idFilial.Equals("-1") && !idBanco.Equals("-1"))
                idContaCorrenteVOs.AddRange(daoT.getCtacors(null, null, idFilial, idBanco, null, null, null));

            ddl.DataTextField = "tostring";
            ddl.DataValueField = "PKString";
            Util.CarregarCombo(ddl, idContaCorrenteVOs);
        }

        //--------------------- Conta Corrente ------------------------
        public static void carregaContaCorrente(SgiDAOT daoT, DropDownList ddl, int? idFilial)
        {
            CtacorVO idContaCorrenteVO = CtacorVO.CreateVO();
            idContaCorrenteVO.idCtaCor = -1;
            idContaCorrenteVO.ctaCor = "";
            List<CtacorVO> idContaCorrenteVOs = new List<CtacorVO>();

            idContaCorrenteVOs.Clear();
            idContaCorrenteVOs.Add(idContaCorrenteVO);

            if (!idFilial.Equals("-1"))
                idContaCorrenteVOs.AddRange(daoT.getCtacors(null, null, idFilial, null, null, null, null));

            ddl.DataTextField = "tostring";
            ddl.DataValueField = "PKString";
            Util.CarregarCombo(ddl, idContaCorrenteVOs);
        }

        #endregion

        //==================================================================================================================================//

        #region Forma de Pagamento

        //--------------------- Forma de Pagamento ------------------------
        public static void carregaFormaPagamento(SgiDAOT daoT, DropDownList ddl, int? idFilial)
        {
            FormapgtoVO idFormaPagamentoVO = FormapgtoVO.CreateVO();
            idFormaPagamentoVO.idFormaPgto = -1;
            idFormaPagamentoVO.formaPgto = "";
            List<FormapgtoVO> idFormaPagamentoVOs = new List<FormapgtoVO>();

            idFormaPagamentoVOs.Clear();
            idFormaPagamentoVOs.Add(idFormaPagamentoVO);

            if (!idFilial.Equals("-1"))
                idFormaPagamentoVOs.AddRange(daoT.getFormapgtos(null, null, idFilial));

            ddl.DataTextField = "formaPgto";
            ddl.DataValueField = "PKString";
            Util.CarregarCombo(ddl, idFormaPagamentoVOs);
        }

        #endregion

        //==================================================================================================================================//

        #region Plano de Conta

        //--------------------- Plano de Conta ------------------------
        public static void carregaPlanoConta(SgiDAOT daoT, DropDownList ddl, int? idFilial)
        {
            PlnctaVO idPlanoContaVO = PlnctaVO.CreateVO();
            idPlanoContaVO.idPlnCta = -1;
            idPlanoContaVO.plnCta = "";
            List<PlnctaVO> idPlanoContaVOs = new List<PlnctaVO>();

            idPlanoContaVOs.Clear();
            idPlanoContaVOs.Add(idPlanoContaVO);

            if (!idFilial.Equals("-1"))
                idPlanoContaVOs.AddRange(daoT.getPlnctas(null, null, idFilial, null, null, null));

            ddl.DataTextField = "tostring";
            ddl.DataValueField = "PKString";
            Util.CarregarCombo(ddl, idPlanoContaVOs);
        }

        #endregion

        //==================================================================================================================================//

        #region Centro de Custo

        //--------------------- Centro de Custo ------------------------
        public static void carregaCentroCusto(SgiDAOT daoT, DropDownList ddl, int? idFilial)
        {
            CcustoVO idCentroCustoVO = CcustoVO.CreateVO();
            idCentroCustoVO.idCCusto = -1;
            idCentroCustoVO.cCusto = "";
            List<CcustoVO> idCentroCustoVOs = new List<CcustoVO>();

            idCentroCustoVOs.Clear();
            idCentroCustoVOs.Add(idCentroCustoVO);

            if (!idFilial.Equals("-1"))
                idCentroCustoVOs.AddRange(daoT.getCcustos(null, null, idFilial, null));

            ddl.DataTextField = "tostring";
            ddl.DataValueField = "PKString";
            Util.CarregarCombo(ddl, idCentroCustoVOs);
        }

        #endregion

        #region Centro de Lucro

        //--------------------- Centro de Custo ------------------------
        public static void carregaCentroLucro(SgiDAOT daoT, DropDownList ddl, int? idFilial)
        {
            ClucroVO idCentroLucroVO = ClucroVO.CreateVO();
            idCentroLucroVO.idCLucro = -1;
            idCentroLucroVO.cLucro = "";
            List<ClucroVO> idCentroLucroVOs = new List<ClucroVO>();

            idCentroLucroVOs.Clear();
            idCentroLucroVOs.Add(idCentroLucroVO);

            if (!idFilial.Equals("-1"))
                idCentroLucroVOs.AddRange(daoT.getClucros(null, null, idFilial, null));

            ddl.DataTextField = "tostring";
            ddl.DataValueField = "PKString";
            Util.CarregarCombo(ddl, idCentroLucroVOs);
        }

        #endregion

        //==================================================================================================================================//

        #region Perfil Administrativos

        public static void carregaPerfioAdmin(SgiDAOT daoT, DropDownList ddl, int? idFilial)
        {
            PerfiladmVO idPerfilAdminVO = PerfiladmVO.CreateVO();
            idPerfilAdminVO.idPerfilAdm = -1;
            idPerfilAdminVO.perfilAdm = "";
            List<PerfiladmVO> idPerfilAdminVOs = new List<PerfiladmVO>();

            idPerfilAdminVOs.Clear();
            idPerfilAdminVOs.Add(idPerfilAdminVO);

            idPerfilAdminVOs.AddRange(daoT.getPerfiladms(null, null, idFilial));

            ddl.DataTextField = "perfilAdm";
            ddl.DataValueField = "PKString";
            Util.CarregarCombo(ddl, idPerfilAdminVOs);
        }

        #endregion
    }
}